

import com.atguigu.sql.udf.MyAvg
import com.atguigu.sql.util.MySparkSessionUtil
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{Dataset, SparkSession}

/**
 * description ：自定义平均值测试类
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/1/11 13:54
 * modified By ：
 * version:    : 1.0
 */
object MyAvgTest {

  def main(args: Array[String]): Unit = {

    // 创建 sparkSession
    val spark: SparkSession = MySparkSessionUtil.get(args)

    // 创建rdd
    val rdd: RDD[String] = spark.sparkContext.textFile("c:/user.txt")

    // 封装rdd为RD[User]
    val rddUser: RDD[User] = rdd.map {
      x =>
        val splits: Array[String] = x.split("\t")
        User(splits(0).toInt, splits(1))
    }

    // 创建dataset
    import spark.implicits._
    val ds: Dataset[User] = rddUser.toDS()

    // 创建临时表
    ds.createTempView("user")

    // 注册自定义函数
    spark.udf.register("MyAvg", MyAvg)

    // sql 查询
    spark.sql("select MyAvg(age) from user").show()

    // 关闭 sparkSession 资源
    MySparkSessionUtil.close(spark)
  }

  case class User(age: Int, name: String)

}
